const dayjs = require('dayjs');
/**
 * 用户通行证业务逻辑
 * 提供登录、注册、登出等功能
 */

// 导入辅助模块
import constants from '../constants.js';

/**
 * 用户通行证业务类
 */
class PassportBiz {
  /**
   * 设置用户Token
   * @param {Object} token 用户token对象
   */
  static setToken(token) {
    try {
      if (!token) return;
      
      // 存储Token
      wx.setStorageSync(constants.CACHE_TOKEN, token);
      
      // 更新登录时间
      wx.setStorageSync('LAST_LOGIN_TIME', dayjs().valueOf());
      
      return true;
    } catch (e) {
      console.error('保存Token失败:', e);
      return false;
    }
  }
  
  /**
   * 获取用户Token
   * @return {Object} 用户token对象
   */
  static getToken() {
    try {
      return wx.getStorageSync(constants.CACHE_TOKEN);
    } catch (e) {
      console.error('获取Token失败:', e);
      return null;
    }
  }
  
  /**
   * 清除Token
   */
  static clearToken() {
    try {
      wx.removeStorageSync(constants.CACHE_TOKEN);
      wx.removeStorageSync('LAST_LOGIN_TIME');
      
      // 设置登出标记
      wx.setStorageSync('MANUAL_LOGOUT', true);
      wx.setStorageSync('LOGOUT_TIME', dayjs().valueOf());
      
      return true;
    } catch (e) {
      console.error('清除Token失败:', e);
      return false;
    }
  }
  
  /**
   * 检查登录状态
   * @return {Boolean} 是否已登录
   */
  static isLogin() {
    try {
      // 检查是否有强制登出标记
      let manualLogout = wx.getStorageSync('MANUAL_LOGOUT');
      if (manualLogout) return false;
      
      // 检查是否刚刚登出
      let logoutTime = wx.getStorageSync('LOGOUT_TIME');
      let now = dayjs().valueOf();
      if (logoutTime && (now - logoutTime < 30 * 1000)) return false;
      
      // 检查是否有Token
      const token = this.getToken();
      return token !== null && token !== undefined;
    } catch (e) {
      console.error('检查登录状态失败:', e);
      return false;
    }
  }
  
  /**
   * 获取登录信息
   * @return {Object} 登录信息对象
   */
  static getLoginInfo() {
    try {
      return wx.getStorageSync('LOGIN_INFO') || null;
    } catch (e) {
      console.error('获取登录信息失败:', e);
      return null;
    }
  }
  
  /**
   * 保存登录信息
   * @param {Object} info 登录信息
   */
  static saveLoginInfo(info) {
    try {
      if (!info) return false;
      wx.setStorageSync('LOGIN_INFO', info);
      return true;
    } catch (e) {
      console.error('保存登录信息失败:', e);
      return false;
    }
  }
  
  /**
   * 生成登录凭证
   * @param {Object} userInfo 用户信息
   * @return {Object} 用户token
   */
  static generateToken(userInfo) {
    if (!userInfo || !userInfo.id) return null;
    
    // 获取设备信息
    let deviceInfo = {};
    try {
      const systemInfo = wx.getSystemInfoSync();
      deviceInfo = {
        brand: systemInfo.brand || '',
        model: systemInfo.model || '',
        system: systemInfo.system || '',
        platform: systemInfo.platform || ''
      };
    } catch (e) {
      console.error('获取设备信息失败:', e);
    }
    
    // 创建Token对象
    const token = {
      id: userInfo.id,
      name: userInfo.name || '',
      avatar: userInfo.avatar || '',
      phone: userInfo.mobile || '',
      role: userInfo.role || '',
      permissions: userInfo.permissions || [],
      lastLoginTime: dayjs().valueOf()
    };
    
    // 创建用户登录记录
    const loginRecord = {
      userId: userInfo.id,
      loginTime: Date.now(),
      platform: 'miniprogram',
      device: deviceInfo,
      location: '',
      ip: '',
      lastLoginTime: dayjs().valueOf()
    };
    
    return token;
  }
}

export default PassportBiz; 